package com.furnitur.core.service;

import com.furnitur.common.api.CommonPage;
import com.furnitur.core.entity.user.User;
import com.furnitur.modules.admin.dto.UserDTO;
import com.furnitur.modules.admin.dto.auth.LoginDTO;
import com.furnitur.modules.admin.dto.auth.PasswordUpdateDTO;
import com.furnitur.modules.admin.dto.auth.RegisterDTO;
import com.furnitur.modules.admin.dto.user.UserQueryDTO;
import org.springframework.web.multipart.MultipartFile;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户注册
     * @param registerDTO 注册信息
     * @return 注册的用户
     */
    User register(RegisterDTO registerDTO);

    String login(LoginDTO loginDTO);

    User getUserByUsername(String username);

    /**
     * 更新密码
     * @param userId 用户ID
     * @param passwordUpdate 密码更新信息
     */
    void updatePassword(Long userId, PasswordUpdateDTO passwordUpdate);

    /**
     * 获取当前登录用户
     */
    User getCurrentUser();

    /**
     * 获取当前登录商家的ID
     * @return 商家ID
     */
    Long getCurrentMerchantId();

    /**
     * 上传用户头像
     * @param file 头像文件
     * @return 头像地址
     * @throws Exception 上传异常
     */
    String uploadUserProfileImage(MultipartFile file) throws Exception;

    /**
     * 上传用户头像
     * @param user 当前用户
     * @param file 头像文件
     * @return 头像URL
     */
    String uploadAvatar(User user, MultipartFile file);

    /**
     * 获取用户列表
     * @param queryDTO 查询参数
     * @return 分页用户列表
     */
    CommonPage<User> listUsers(UserQueryDTO queryDTO);

    /**
     * 创建用户
     * @param userDTO 用户信息
     * @return 创建的用户
     */
    User createUser(UserDTO userDTO);

    /**
     * 更新用户
     * @param id 用户ID
     * @param userDTO 用户信息
     * @return 更新后的用户
     */
    User updateUser(Long id, UserDTO userDTO);

    /**
     * 删除用户
     * @param id 用户ID
     */
    void deleteUser(Long id);

    /**
     * 批量删除用户
     * @param ids 用户ID列表
     */
    void deleteUsers(Long[] ids);

    /**
     * 更新用户状态
     * @param id 用户ID
     * @param status 状态
     */
    void updateUserStatus(Long id, Integer status);
}